package priority;

import java.util.PriorityQueue;

/**
 * 703、数据流中的第K大的元素
 */
public class Day20 {
    // 创建一个小根堆，默然创建的是小根堆
    PriorityQueue<Integer> heap = new PriorityQueue<>();
    int kk = 0;
    public void KthLargest(int k, int[] nums) {
        kk = k;
        // 把所有的数据都放入到小根堆中，但是只存在k个，多出来的出堆顶，出去的一定不是我们要的值
        for(int num : nums) {
            heap.offer(num);
            if(heap.size() > kk) {
                heap.poll();
            }
        }
    }

    public int add(int val) {
        // 添加数据，之后进行出堆操作，最后剩下的k的数据的最顶上的就是需要的数据，也就是第k大的元素
        heap.offer(val);
        if(heap.size() > kk) {
            heap.poll();
        }

        return heap.peek();
    }
}
